/*
 * claplan_data.h
 *
 *  Created on: 1 Nov 2013
 *      Author: Tom Vercauteren
 */

#ifndef CLAPLAN_DATA_H_
#define CLAPLAN_DATA_H_

#include "claplan_header.h"
#include "claplan_optimization.h"
#include "claplan_target.h"
#include "claplan_oar.h"
#include "claplan_beam.h"

#include <ostream>
#include <string>
#include <vector>

class ClaplanData;
/** List of claplan data pointers */
typedef std::vector<ClaplanData*> ClaplanDataList;

/**
 * Contains all data of the claplan.
 */
class ClaplanData
{
public:
	ClaplanData();
	ClaplanData(const ClaplanData &cd);
	~ClaplanData();
	ClaplanData& operator=(const ClaplanData &cd);

	std::string file;

	/** header */
	ClaplanHeader header;
	/** general optimization information */
	ClaplanOptimization opt;
	double nfrac;
	/** list of targets */
	std::vector<ClaplanTarget> targets;
	/** list of oars */
	std::vector<ClaplanOar> oars;
	/** list of beams */
	std::vector<ClaplanBeam> beams;

	friend std::ostream & operator<<(std::ostream & os,
			const ClaplanData &data);
};

#endif /* CLAPLAN_DATA_H_ */
